import re
import datetime
import random
from common.handleconfig import conf


class CaseData:
    """这个类专门用例保存执行过程中提取出来给其他用例用的数据"""
    pass


class GenerateDate(object):
    def generate_data(self, str1, str2="", site="r"):
        """
        修改时间：2020/3/7
        生成一个以年月日时分秒毫秒在左/右/中间的数据，如 ABC202003071814，202003071814@QQ.COM,TEST-202003071814-REPORT
        :param s:
        :param site:位置，默认年月日时分秒在右（r），设为左边l，中间（r）时输入两个参数
        :return:
        """

        date = datetime.datetime.now().strftime("%m%d%H%M%S%f")
        if site == "r":
            s = str(str1) + date + str(str2)
        elif site == "l":
            s = date + str(str1)
        else:
            s = str(str1)

        return s

    def generate_random_str(self, len):
        """
        修改时间：2020/3/8
        输入一个数字len，返回len字符长度的字符
        :return:
        """
        str = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"
        try:
            len = int(len)
        except:
            return
        else:
            s = []
            for i in range(len):
                s.append(random.choice(str))
            return "".join(s)

def replace_data(s):
    """
    修改时间：2020/3/7
    替换测试用例中# #的数据
    :param s:
    :return:
    """
    r1 = r"#(.+?)#"
    while re.search(r1, s):
        # 需要被替换的内容
        res = re.search(r1, s)
        # 获取待替换的内容
        data = res.group()
        # 获取需要被替换的字段
        key = res.group(1)
        try:
            # 根据要被替换的字段，到配置文件找对应数据做替换
            s = s.replace(data, conf.get("test_data", key))
        except Exception:
            # 如果配置文件找不到（报错了），则到CaseData的属性中找对应的值做替换
            s = s.replace(data, getattr(CaseData, key))
    return s
